From eee511dec9d1f7e2bdfb4aebfe5ffbd70cdf6f51 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Mon, 9 May 2016 18:09:38 +0100 Subject: [PATCH] x86/svm: Don't unconditionally use a new ASID in svm_invlpg_intercept() paging_invlpg() already returns a boolean indicating whether an invalidation is necessary or not. A return value of 0 indicates that the specified virtual address wasn't shadowed (or has already been flushed), cannot currently be cached in the TLB. This is a performance optimisation. Signed-off-by: Andrew Cooper Reviewed-by: Boris Ostrovsky Reviewed-by: Tim Deegan Release-acked-by: Wei Liu --- xen/arch/x86/hvm/svm/svm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 7634c3fc42..081a5d8d89 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2224,8 +2224,8 @@ static void svm_invlpg_intercept(unsigned long vaddr) { struct vcpu *curr = current; HVMTRACE_LONG_2D(INVLPG, 0, TRC_PAR_LONG(vaddr)); - paging_invlpg(curr, vaddr); - svm_asid_g_invlpg(curr, vaddr); + if ( paging_invlpg(curr, vaddr) ) + svm_asid_g_invlpg(curr, vaddr); } static struct hvm_function_table __initdata svm_function_table = { -- 2.30.2